/*
1. npm i koa --save           koa服务开发依赖
2. npm i koa-router --save    路由依赖
3. npm i nodemon --save       服务运行工具, 运行命令:nodemon app.js, 类似 npm run dev, 需要修改package.json里面的脚本命令
4. npm i koa-json --save   
5. npm install koa koa-bodyparser  它可以解析请求体中的数据，并将其存储在 ctx.request.body 对象中。 
*/

const Koa = require('koa');
const app = new Koa();
const router = require('koa-router')()
const json = require('koa-json')
app.use(json()) //格式化json

router.get('/', async (ctx) => {
    //get请求的路由
    console.log(ctx);
    // {
    //   request: {
    //     method: 'GET',
    //     url: '/',
    //     header: {
    //       host: 'localhost:3000',
    //       connection: 'keep-alive',
    //       'cache-control': 'max-age=0',
    //       'sec-ch-ua': '";Not A Brand";v="99", "Chromium";v="94"',
    //       'sec-ch-ua-mobile': '?0',
    //       'sec-ch-ua-platform': '"Windows"',
    //       'upgrade-insecure-requests': '1',
    //       'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.197.400 QQBrowser/11.6.5265.400',
    //       accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    //       'sec-fetch-site': 'none',
    //       'sec-fetch-mode': 'navigate',
    //       'sec-fetch-user': '?1',
    //       'sec-fetch-dest': 'document',
    //       'accept-encoding': 'gzip, deflate, br',
    //       'accept-language': 'zh-CN,zh;q=0.9'
    //     }
    //   },
    //   response: {
    //     status: 404,
    //     message: 'Not Found',
    //     header: [Object: null prototype] {}
    //   },
    //   app: { subdomainOffset: 2, proxy: false, env: 'development' },
    //   originalUrl: '/',
    //   req: '<original node req>',
    //   res: '<original node res>',
    //   socket: '<original node socket>'
    // }

    //响应给前端
    ctx.body = {
        data: { name: 'my name' }
    }
})
router.get('/test-query', async (ctx) => {
    //get传值,
    console.log(ctx.query); //获取一个 get传来的对象
    console.log(ctx.querystring); //获取一个get传来的字符串  
    console.log(ctx.request); //获取对象, 属性有url, header等
    console.log(ctx.request.query); //获取一个 get传来的对象
    console.log(ctx.request.querystring); //获取一个get传来的字符串 
})
router.post('/test-koa-bodyparser', ctx => {
    ctx.body = ctx.request.body;
});

app.use(bodyParser());
//启动路由
app.use(router.routes())
//设置响应头
app.use(router.allowedMethods())
//启动服务
app.listen(3000);
